
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using Gman.Entity.Entities;
using Gman.Entity.Interfaces;
using Gman.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;


namespace Gman.Data
{
    //-------------------------------------------------------------------
    //Archivo     : ProveedorDA.cs
    //Proyecto    : Gman
    //Creacion    : BIS(NombreDesarrollador) 20130226
    //Modificacion: 
    //Descripcion : Clase para capa de datos.
    //-------------------------------------------------------------------
    public class ProveedorDA : IProveedor
    {

        Database db = DatabaseFactory.CreateDatabase();

        //-----------------------------------------------------------------------------------------------
        //Nombre: Listar
        //Objetivo: Retorna una lista de registros de tipo ProveedorBE  
        //Creacion    : TISI(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public IList<ProveedorBE> Listar(ProveedorBE oItem)
        {
            IList<ProveedorBE> lista = new List<ProveedorBE>();
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_ListarProveedor");

                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    lista = MakeUniqueDatos(oR);
                }

            }
            catch (Exception ex)
            {
                throw new Exception("ProveedorDA.Listar()", ex);
            }
            finally
            {
            }
            return lista;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Obtener
        //Objetivo: Retorna un objeto de Tipo ProveedorBE  
        //Creacion    : BIS(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public ProveedorBE Obtener(ProveedorBE oItem)
        {
            ProveedorBE itemResult = null;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerProveedor");
                db.AddInParameter(cmd, "@IDProveedor", DbType.Int64, oItem.IDProveedor);

                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    while (oR.Read())
                    {
                        itemResult = MakeDatosMapeados(oR);
                    }
                }
                return itemResult;
            }
            catch (Exception ex)
            {
                throw new Exception("ProveedorDA.Obtener()", ex);
            }
            finally
            {
            }
        }




        public ProveedorBE ObtenerXRuc(ProveedorBE oItem)
        {
            ProveedorBE itemResult = null;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerProveedorXRuc");
                db.AddInParameter(cmd, "@RucProv", DbType.Int64, oItem.RucProv);
                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    while (oR.Read())
                    {
                        itemResult = MakeDatosMapeados(oR);
                    }
                }
                return itemResult;
            }
            catch (Exception ex)
            {
                throw new Exception("ProveedorDA.ObtenerXRuc()", ex);
            }
            finally
            {
            }
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Registrar
        //Objetivo: Almacena el registro de un objeto de tipo ProveedorBE  
        //Creacion    : TISI(NombreDesarrollador) 20130226  



        public IList<ProveedorBE> BuscarProveedor(ProveedorBE oItem)
        {
            IList<ProveedorBE> lista = new List<ProveedorBE>();
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_BUSCARProveedor");
                db.AddInParameter(cmd, "@RucProv", DbType.Int64, oItem.RucProv);

                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    //while (oR.Read())
                    //{
                    lista = MakeUniqueDatos(oR);
                    //}
                }
                return lista;
            }
            catch (Exception ex)
            {
                throw new Exception("ProveedorDA.Buscar()", ex);
            }
            finally
            {
            }

        }

        //----------------------------------------------------------------------------------------------
        public int Registrar(ProveedorBE oItem)
        {
            int resultado = 0;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_RegistrarProveedor");
                //db.AddInParameter(cmd, "@IDProveedor", DbType.Int64 , oItem.IDProveedor);
                db.AddInParameter(cmd, "@RucProv", DbType.Int64, oItem.RucProv);
                db.AddInParameter(cmd, "@RazonSProv", DbType.String, oItem.RazonSProv);
                db.AddInParameter(cmd, "@DirecProv", DbType.String, oItem.DirecProv);
                db.AddInParameter(cmd, "@NroCeluProvee", DbType.String, oItem.NroCeluProvee);
                db.AddInParameter(cmd, "@CodUbigeo", DbType.String, oItem.CodUbigeo);
                db.AddInParameter(cmd, "@NroTelfProvee", DbType.String, oItem.NroTelfProvee);
                db.AddInParameter(cmd, "@AnexProv", DbType.String, oItem.AnexProv);
                db.AddInParameter(cmd, "@TipoProvee", DbType.String, oItem.TipoProvee);
                db.AddInParameter(cmd, "@FaxProv", DbType.Int64, oItem.FaxProv);
                db.AddInParameter(cmd, "@EstadoProvee", DbType.Int32, oItem.EstadoProvee);
                db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
                //db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
                db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
                //db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
                //db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
                //db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
                db.AddInParameter(cmd, "@IDEmp", DbType.Int32, oItem.IDEmp);

                resultado = Convert.ToInt32(db.ExecuteScalar(cmd));
                //resultado = db.ExecuteNonQuery(cmd);      

            }
            catch (Exception ex)
            {
                throw new Exception("ProveedorDA.Registrar()", ex);
            }
            finally
            {

            }
            return resultado;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Actualizar
        //Objetivo: Actualiza el registro de un objeto de tipo ProveedorBE 
        //Creacion    : TISI(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public int Actualizar(ProveedorBE oItem)
        {
            int resultado = 0;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_ActualizarProveedor");
                db.AddInParameter(cmd, "@IDProveedor", DbType.Int64, oItem.IDProveedor);
                db.AddInParameter(cmd, "@RucProv", DbType.Int64, oItem.RucProv);
                db.AddInParameter(cmd, "@RazonSProv", DbType.String, oItem.RazonSProv);
                db.AddInParameter(cmd, "@DirecProv", DbType.String, oItem.DirecProv);
                db.AddInParameter(cmd, "@NroCeluProvee", DbType.String, oItem.NroCeluProvee);
                db.AddInParameter(cmd, "@CodUbigeo", DbType.String, oItem.CodUbigeo);
                db.AddInParameter(cmd, "@NroTelfProvee", DbType.String, oItem.NroTelfProvee);
                db.AddInParameter(cmd, "@AnexProv", DbType.String, oItem.AnexProv);
                db.AddInParameter(cmd, "@TipoProvee", DbType.String, oItem.TipoProvee);
                db.AddInParameter(cmd, "@FaxProv", DbType.Int64, oItem.FaxProv);
                db.AddInParameter(cmd, "@EstadoProvee", DbType.Int32, oItem.EstadoProvee);
                db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
                db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
                db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
                db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
                db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
                db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
                db.AddInParameter(cmd, "@IDEmp", DbType.Int32, oItem.IDEmp);

                resultado = db.ExecuteNonQuery(cmd);

            }
            catch (Exception ex)
            {
                throw new Exception("ProveedorDA.Actualizar()", ex);
            }
            finally
            {

            }
            return resultado;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Eliminar
        //Objetivo: Elimina el registro de un objeto de tipo ProveedorBE  
        //Creacion    : BIS(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public int Eliminar(ProveedorBE oItem)
        {
            int resultado = 0;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_EliminarProveedor");
                db.AddInParameter(cmd, "@IDProveedor", DbType.Int64, oItem.IDProveedor);


                resultado = db.ExecuteNonQuery(cmd);

            }
            catch (Exception ex)
            {
                throw new Exception("ProveedorDA.Eliminar()", ex);
            }
            finally
            {

            }
            return resultado;
        }

        private IList<ProveedorBE> MakeUniqueDatos(IDataReader oR)
        {
            IList<ProveedorBE> list = new List<ProveedorBE>();

            while (oR.Read())
                list.Add(MakeDatosMapeados(oR));

            return list;
        }

        private ProveedorBE MakeDatosMapeados(IDataReader oR)
        {
            var itemResult = new ProveedorBE();

            itemResult.IDProveedor = oR["IDProveedor"].ToInt64();
            itemResult.RucProv = oR["RucProv"].ToInt64();
            itemResult.RazonSProv = oR["RazonSProv"].ToString();
            itemResult.DirecProv = oR["DirecProv"].ToString();
            itemResult.NroCeluProvee = oR["NroCeluProvee"].ToString();
            itemResult.CodUbigeo = oR["CodUbigeo"].ToString();
            itemResult.NroTelfProvee = oR["NroTelfProvee"].ToString();
            itemResult.AnexProv = oR["AnexProv"].ToString();
            itemResult.TipoProvee = oR["TipoProvee"].ToString();
            itemResult.FaxProv = oR["FaxProv"].ToInt64();
            itemResult.EstadoProvee = oR["EstadoProvee"].ToInt32();
            itemResult.UsuReg = oR["UsuReg"].ToString();
            itemResult.FecReg = oR["FecReg"].ToDateTime();
            itemResult.TermCnxReg = oR["TermCnxReg"].ToString();
            itemResult.UsuMod = oR["UsuMod"].ToString();
            itemResult.fecMod = oR["fecMod"].ToDateTime();
            itemResult.TermCnxMod = oR["TermCnxMod"].ToString();
            itemResult.IDEmp = oR["IDEmp"].ToInt32();

            return itemResult;
        }


    }
}

